home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / asm / pc370_3.exe / lha / MVS.ALC < prev    next >
Text File  |  1987-06-06  |  18KB  |  660 lines

  1. *********
  2. *
  3. * PGMID.  MVS.ALC  (LINKED TO MVS.MOD FOR DYNMAIC LOAD AND EXEC)
  4. * AUTHOR. DON HIGGINS
  5. * DATE.   05/26/87
  6. * REMARKS.
  7. *         THIS MODULE DEFINES MVS SVC HANDLER AND EXTERNAL
  8. *         INTERRUPT HANDLER TO SUPPORT EXECUTION OF MODULES WITH
  9. *         MVS SVC'S.  RETRUN FROM THIS MODULE IS VIA LPSW WHICH
  10. *         PLACES CALLING PROGRAM IN PROBLEM STATE WITH SUPERVISOR
  11. *         AND NO EXTERNAL INTERRUPTS ENABLED (EXTERNAL CAN BE TURNED
  12. *         ON LATER IF DESIRED).  FOR MVS SVC EQU'S SEE MVS.DOC.
  13. *
  14. * MAINTENANCE.
  15. *
  16. * 05/30/87 CHANGE SVC 3 EXIT TO RETURN IN SUPR STATE, ADD SVC 10
  17. * 05/31/87 ADD IGC013 ABEND T1/T4
  18. * 06/01/87 USE SVCR15 TO SIMPLIFY RTN SAVE/RESTORE, CHANGE IGC NAMES
  19. * 06/04/87 SAVE R14,R1 ACROSS EXECRTN FOR SVC'S AND INS'S
  20. * 06/06/87 FIX WTOR TO CLEAR R15 AND USE EXTERNAL INTERRUPT TO POST
  21. *********
  22. *
  23. * MVS NUCLEUS INITIALIZATION PROGRAM (NIP)
  24. *
  25. *********
  26. MVS      CSECT
  27.     USING MVS,R15
  28.     STM   R14,R6,12(R13)
  29.     LR    R6,R15
  30.     DROP  R15
  31.     USING MVS,R6
  32.     SVC   TRACE
  33.     DC    C'IOF'            TURN OFF INTERRUPTS FOR WTOR FACILITY
  34. *
  35. * INIT CVT
  36. *
  37.     LA    R1,CVT
  38.     USING IHACVT,R1
  39.     ST    R1,16             STORE CVT ADDRESS IN LOW MEMORY
  40.     LA    R0,TCB
  41.     ST    R0,CVTTCBP        CVT TCB PTR
  42.     LA    R0,SMCA
  43.     ST    R0,CVTSMCA        CVT SMCA PTR
  44.     L     R0,ASCASL
  45.     ST    R0,CVTMZ00        CVT END OF REAL MEMORY
  46. *
  47. * INIT SVC TABLE
  48. *
  49.     LA    R1,4*256
  50.     SVC   GMAIN
  51.     LTR   R0,R0
  52.     BNZ   ABEND80A          NO MEMORY FOR SVC TABLE
  53.     ST    R2,ASVCTAB
  54.     LR    R0,R2
  55.     LA    R1,4*256
  56.     SR    R14,R14
  57.     SR    R15,R15
  58.     MVCL  R0,R14            CLEAR SVC TABLE
  59.     LA    R0,IGC0001
  60.     ST    R0,4*1(R2)        INIT SVC  1 WAIT
  61.     LA    R0,IGC0002
  62.     ST    R0,4*2(R2)        INIT SVC  2 POST
  63.     LA    R0,IGC0003
  64.     ST    R0,4*3(R2)        INIT SVC  3 EXIT
  65.     LA    R0,IGC0010
  66.     ST    R0,4*10(R2)       INIT SVC 10 GMAINR/FMAINR
  67.     LA    R0,IGC0013
  68.     ST    R0,4*13(R2)       INIT SVC 13 ABEND T1
  69.     LA    R0,IGC0035
  70.     ST    R0,4*35(R2)       INIT SVC 35 WTO/WTOR
  71. *
  72. * INIT INS TABLE
  73. *
  74.     LA    R1,4*256
  75.     SVC   GMAIN
  76.     LTR   R0,R0
  77.     BNZ   ABEND80A          NO MEMORY FOR INS TABLE
  78.     ST    R2,AINSTAB
  79.     LR    R0,R2
  80.     LA    R1,4*256
  81.     SR    R14,R14
  82.     SR    R15,R15
  83.     MVCL  R0,R14            CLEAR SVC TABLE
  84. *
  85. * INIT SVC, PGM, AND EXT NEW PSW'S
  86. *
  87.     LA    R0,SVCRTN
  88.     ST    R0,SVCPSW+4       INIT NEW SVC PSW ADDR
  89.     LA    R0,PGMRTN
  90.     ST    R0,PGMPSW+4       INIT NEW PGM PSW ADDR
  91.     LA    R0,EXTRTN
  92.     ST    R0,EXTPSW+4       INIT NEW EXT PSW ADDR
  93.     MVC   NEWSVC(8),SVCPSW  SET NEW SVC PSW
  94.     MVC   NEWPGM(8),PGMPSW  SET NEW PGM PSW
  95.     MVC   NEWEXT(8),EXTPSW  SET NEW EXT PSW
  96.     LM    R14,R6,12(R13)    RESTORE CALLER'S REG'S
  97.     DROP  R6
  98.     USING MVS,R15
  99.     ST    R14,PRBPSW+4      INIT PROBLEM STATE EXIT PSW ADDR
  100. *
  101. * EXIT TO CALLER IN PROBLEM STATE TO ACTIVATE MVS SHELL ENVIRONMENT
  102. *
  103.     LPSW  PRBPSW            EXIT WITH NEW PROBLEM PSW
  104.     DROP
  105. SVCPSW   DS    0D
  106.     DC    X'060C0000',A(*-*)  ENTER SVC HANDLER IN SUPR STATE
  107. PGMPSW   DS    0D
  108.     DC    X'060C0000',A(*-*)  ENTER PGM HANDLER IN SUPR STATE
  109. EXTPSW   DS    0D
  110.     DC    X'060C0000',A(*-*)  ENTER EXT HANDLER IN SUPR STATE
  111. PRBPSW   DS    0D
  112.     DC    X'070D0000',A(*-*)  RETURN WITH PROB. STATE AND EXT. INT.
  113. *********
  114. *
  115. *  MVS SVC INTERRUPT HANDLER
  116. *
  117. *********
  118. SVCRTN   EQU   *
  119.     SVC   TRACE
  120.     DC    C'SVC'
  121.     DROP
  122.     ST    R15,SVCR15
  123.     L     R15,NEWSVC+4
  124.     USING SVCRTN,R15
  125.     STM   R0,R14,SVCSAV
  126.     L     R14,SVCR15
  127.     ST    R14,SVCSAV+15*4
  128.     L     R14,OLDSVC+4  R14 = ADDR SVC + 2
  129.     BCTR  R14,0
  130.     SR    R2,R2
  131.     IC    R2,0(R14)     R2=SVC#
  132.     L     R3,ASVCTAB
  133.     LA    R4,IGC0NNN
  134.     BAL   R14,EXECRTN    EXECUTE SVC
  135.     USING *,R14
  136.     LTR   R15,R15        WAS EXEC OK
  137.     BNZ   ABEND106
  138.     LM    R2,R13,SVCSAV+2*4  RESTORE USER REGS (2-13 ONLY)
  139.     LPSW  OLDSVC         EXIT TO INSTR AFTER ORIG SVC IN PROB STATE
  140. ABEND106 EQU   *
  141.     L     R1,=X'80106000' NO, ABEND 106 WITH DUMP
  142.     LA    R2,13
  143.     L     R3,ASVCTAB
  144.     LA    R4,IGC0NNN
  145.     BAL   R14,EXECRTN   EXECUTE ABEND SVC
  146.     DROP
  147.     USING *,R14
  148.     OI    OLDSVC+1,X'02' TURN ON WAIT BIT IN OLD SVC PSW
  149.     LM    R0,R15,SVCSAV RESTORE ALL REGS TO ORIG.
  150.     LPSW  OLDSVC        IF IT RETURN'S, LOAD WAIT STATE OLD PSW
  151.     DROP
  152. SVCSAV   DC    16F'0'
  153. ********
  154. *
  155. * PROGRAM INTERRUPT ROUTINE
  156. *
  157. ********
  158. PGMRTN   EQU   *
  159.     SVC   TRACE
  160.     DC    C'PGM'
  161.     DROP
  162.     ST    R15,PGMR15  TEMP SAVE R15 IN LOW MEMORY
  163.     L     R15,NEWPGM+4
  164.     USING PGMRTN,R15
  165.     STM   R0,R14,PGMSAV  SAVE REGS
  166.     L     R14,PGMR15
  167.     ST    R14,PGMSAV+4*15
  168.     CLI   OLDPGM+3,2    IS THIS PRIVILEGED OR OPERATION EXCEPTION
  169.     BH    ABEND0CX      NO, ABEND 0CX WITH DUMP
  170.     L     R14,OLDPGM+4  YES, TRY TO LOAD INS0NNN MACRO INSTRUCTION
  171.     SR    R2,R2
  172.     IC    R2,0(R14)     R2 = OPERATION CODE
  173.     L     R3,AINSTAB
  174.     LA    R4,INS0NNN
  175.     BAL   R14,EXECRTN   EXECUTE INS RTN IF FOUND
  176.     USING *,R14
  177.     LTR   R15,R15       WAS MACRO INSTR. EXEC OK
  178.     BNZ   ABEND0CX      NO, ABEND 0CX WITH DUMP
  179.     LM    R0,R15,PGMSAV RESTORE ALL REGS
  180.     LPSW  OLDPGM        EXIT TO NEXT INSTR IN PROB STATE
  181.     DROP
  182. ABEND0CX EQU   *
  183.     BALR  R15,0
  184.     USING *,R15
  185.     SR    R1,R1
  186.     IC    R1,OLDPGM+3
  187.     SLL   R1,12
  188.     O     R1,=X'800C0000' R1=0CX SYSTEM ABEND WITH DUMP
  189.     LA    R2,13
  190.     L     R3,ASVCTAB
  191.     LA    R4,IGC0NNN
  192.     BAL   R14,EXECRTN   EXECUTE ABEND SVC
  193.     DROP
  194.     USING *,R14
  195.     OI    OLDPGM+1,X'02' TURN ON WAIT BIT IN OLD PGM PSW
  196.     LM    R0,R15,PGMSAV
  197.     LPSW  OLDPGM        IF IT RETURN'S, LOAD WAIT STATE OLD PSW
  198.     DROP
  199. PGMSAV   DC    16F'0'         SAVE R0-R15
  200. ********
  201. *
  202. * EXTERNAL INTERRUPT ROUTINE
  203. *
  204. *   1.  CURRENTLY ONLY FUNCTION IMPLEMENTED VIA EXTERNAL INTERRUPT IS
  205. *       ENTRY OF WTOR REPLY WITH POST OF ECB WHEN DONE.  ONLY ONE WTOR
  206. *       ACTIVE AT A TIME IS SUPPORTED IN THIS SINGLE USER SHELL.
  207. *       PC/370 RELEASE 2.0 EXECUTES EXTERNAL INTERRUPT ROUTINE EVERY
  208. *       256 INSTRUCTIONS IF ENABLED AND PROBLEM STATE.  THIS WILL
  209. *       CAUSE HESITATION ON SLOWER PC'S AND HAVING EXTERNAL INTERRUPT
  210. *       ENABLED FOR THIS FACILITY INTRODUCES AROUND 10% OVERHEAD (25
  211. *       EXTRA INSTRUCTIONS EVERY 256 INSTRUCTIONS).
  212. *
  213. ********
  214. EXTRTN   EQU   *
  215.     SVC   TRACE
  216.     DC    C'EXT'
  217.     DROP
  218.     ST    R15,EXTR15    TEMP SAV R15
  219.     L     R15,NEWEXT+4
  220.     USING EXTRTN,R15
  221.     STM   R0,R14,EXTSAV    SAVE REGS
  222.     L     R14,EXTR15
  223.     ST    R14,EXTSAV+4*15
  224.     CLI   WTORPEND,TRUE    EXIT IF NO WTOR PENDING
  225.     BNE   EXTEXT
  226.     SVC   KEYSTAT          IS THERE KEYBOARD INPUT PENDING
  227.     LTR   R0,R0            EXIT IF NO KEY PENDING
  228.     BZ    EXTEXT
  229.     L     R3,WTORCCNT
  230.     L     R4,WTORCRPY
  231. WTORLOOP EQU   *
  232.     SVC   KEYSTAT          IS THERE KEYBOARD INPUT PENDING
  233.     LTR   R0,R0
  234.     BZ    WTORSAVE
  235.     SVC   KEYREAD
  236.     CLM   R0,1,=AL1(CR)
  237.     BE    WTORDONE         STOP AT CARRIAGE RETURN
  238.     STC   R0,0(R4)
  239.     LA    R4,1(R4)
  240.     BCT   R3,WTORLOOP      REPEAT UNTIL NO MORE CHAR OR FULL
  241. WTORDONE EQU   *
  242.     MVI   WTORPEND,FALSE
  243.     LA    R2,LF
  244.     SVC   WRITECHR
  245.     LA    R2,CR
  246.     SVC   WRITECHR
  247.     L     R2,WTORTCNT
  248.     SR    R2,R3
  249.     BZ    WTORSKIP         SKIP CONVERT IF NO CHAR.
  250.     L     R1,WTORARPY
  251.     SVC   ASCEBC           CONVERT REPLY TO EBCDIC
  252. WTORSKIP EQU   *
  253.     L     R1,WTORAECB
  254.     LA    R6,IGC0002
  255.     BALR  R14,R6           POST WTOR ECB VIA BRANCH ENTRY TO POST
  256.     USING *,R14
  257.     LM    R0,R15,EXTSAV    RESTORE ALL REGS
  258.     LPSW  OLDEXT           EXIT TO NEXT INSTR. OR EXIT FROM WAIT
  259.     DROP  R14
  260. WTORSAVE EQU   *
  261.     ST    R3,WTORCCNT
  262.     ST    R4,WTORCRPY
  263. EXTEXT   EQU   *
  264.     LM    R0,R15,EXTSAV    RESTORE ALL REGS
  265.     LPSW  OLDEXT           EXIT TO NEXT INSTR
  266.     DROP
  267. EXTSAV   DC    16F'0'         SAVE R0-R15
  268. ********
  269. *
  270. *  EXECUTE SVC/INS ROUTINE FROM SVC, PGM, OR EXT INTERRUPT HANDLER
  271. *
  272. *  NOTE THIS ROUTINE ALONG WITH INTERRUPT HANDLERS IS CURRENTLY ONLY
  273. *  SERIALLY REUSABLE SO NO SVC CAN ISSUE MVS SVC ETC. (PC/370 SVC'S OK).
  274. *  THIS IS A SINGLE USER NON-MULTI-TASKING VERSION OF MVS.
  275. *
  276. *  R2  = NUMBER OF SVC OR USER DEFINED INSTRUCTION OP CODE
  277. *  R3  = SVC/INS TABLE
  278. *  R4  = ADDRES OF MODULE NAME 'IGC0NNN' OR 'INS0NNN'
  279. *  R14 = RETURN ADDRESS
  280. *  R15 = NZ IF LOAD FAILED ELSE ZERO FOR SUCCESSFUL EXECUTION
  281. *
  282. EXECRTN  EQU   *
  283.     BALR  R7,0
  284.     USING *,R7
  285.     CLI   LOCK,BUSY
  286.     BE    ABENDFXX      ABEND FXX FOR INVALID RECURSIVE ENTRY
  287.     MVI   LOCK,BUSY
  288.     ST    R14,EXECEXT
  289.     AR    R2,R2
  290.     AR    R2,R2         R2=4*SVC#